home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / NET / PROTOCOL.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  2KB  |  83 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the protocol dispatcher.
  7.  *
  8.  * Version:    @(#)protocol.h    1.0.2    05/07/93
  9.  *
  10.  * Author:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  *
  17.  *    Changes:
  18.  *        Alan Cox    :    Added a name field and a frag handler
  19.  *                    field for later.
  20.  *        Alan Cox    :    Cleaned up, and sorted types.
  21.  *        Pedro Roque    :    inet6 protocols
  22.  */
  23.  
  24. #ifndef _PROTOCOL_H
  25. #define _PROTOCOL_H
  26.  
  27. #include <linux/config.h>
  28. #include <linux/in6.h>
  29. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  30. #include <linux/ipv6.h>
  31. #endif
  32.  
  33. #define MAX_INET_PROTOS    32        /* Must be a power of 2        */
  34.  
  35.  
  36. /* This is used to register protocols. */
  37. struct inet_protocol 
  38. {
  39.     int            (*handler)(struct sk_buff *skb, unsigned short len);
  40.     void            (*err_handler)(struct sk_buff *skb, unsigned char *dp, int len);
  41.     struct inet_protocol    *next;
  42.     unsigned char        protocol;
  43.     unsigned char        copy:1;
  44.     void            *data;
  45.     const char        *name;
  46. };
  47.  
  48. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  49. struct inet6_protocol 
  50. {
  51.     int    (*handler)(struct sk_buff *skb,
  52.             unsigned long len);
  53.  
  54.     void    (*err_handler)(struct sk_buff *skb, struct ipv6hdr *hdr,
  55.                    struct inet6_skb_parm *opt,
  56.                    int type, int code, unsigned char *buff,
  57.                    __u32 info);
  58.     struct inet6_protocol *next;
  59.     unsigned char    protocol;
  60.     unsigned char    copy:1;
  61.     void        *data;
  62.     const char    *name;
  63. };
  64. #endif
  65.  
  66. extern struct inet_protocol *inet_protocol_base;
  67. extern struct inet_protocol *inet_protos[MAX_INET_PROTOS];
  68.  
  69. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  70. extern struct inet6_protocol *inet6_protocol_base;
  71. extern struct inet6_protocol *inet6_protos[MAX_INET_PROTOS];
  72. #endif
  73.  
  74. extern void    inet_add_protocol(struct inet_protocol *prot);
  75. extern int    inet_del_protocol(struct inet_protocol *prot);
  76.  
  77. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  78. extern void    inet6_add_protocol(struct inet6_protocol *prot);
  79. extern int    inet6_del_protocol(struct inet6_protocol *prot);
  80. #endif
  81.  
  82. #endif    /* _PROTOCOL_H */
  83.